package figuren;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Ellipse extends Figur
{
	double	a;
	double	b;
	Point	zentrum;

	public Ellipse(int lang, int kurz, Point zentrum)
	{
		this.a = lang / 2;
		this.b = kurz / 2;
		this.zentrum = zentrum;
		this.aussenLinie = this.berechneAussereLinie();
	}

	public double berechneYabstand(double x)
	{
		double y = 0;
		double x0 = this.zentrum.getX();
		y = b * (Math.sqrt(1 - ((Math.pow(x - x0, 2))) / Math.pow(this.a, 2)));
		return y;
	}

	public List<Point> berechneAussereLinie()
	{
		List<Point> rand = new ArrayList<Point>();
		double x0 = this.zentrum.getX();
		double y0 = this.zentrum.getY();
		
		List<Point> ersteViertel = new ArrayList<Point>();
		for (double x = x0; x <= (x0 + a); x++)
		{
			double y = y0 - this.berechneYabstand(x);
			Point p = new Point(x, y);
			ersteViertel.add(p);
		}
		rand.addAll(ersteViertel);
		
		
		
		List<Point> zweiteViertel = new ArrayList<Point>();
		for (double x = x0; x <= (x0 + a); x++)
		{
			double y = y0 + this.berechneYabstand(x);
			Point p = new Point(x, y);
			zweiteViertel.add(p);
		}
		Collections.reverse(zweiteViertel);
		rand.addAll(zweiteViertel);
		
		List<Point> dritteViertel = new ArrayList<Point>();
		for (double x = x0; x >= (x0 - a); x--)
		{
			double y = y0 + this.berechneYabstand(x);
			Point p = new Point(x, y);
			dritteViertel.add(p);
		}
		rand.addAll(dritteViertel);
		
		List<Point> vierteViertel = new ArrayList<Point>();
		for (double x = x0; x >= (x0 - a); x--)
		{
			double y = y0 - this.berechneYabstand(x);
			Point p = new Point(x, y);
			vierteViertel.add(p);
		}
		Collections.reverse(vierteViertel);
		rand.addAll(vierteViertel);
		
		
		
		return rand;
	}

	public double inhalt()
	{
		return (Math.PI * this.a * this.b);
	}

	public double umfang()
	{
		double x = (this.a - this.b) / (this.a + this.b);
		double umfang = Math.PI * (this.a + this.b)
				* (1 + ((3 * x) / (10 + Math.sqrt(4 - 3 * Math.pow(x, 2)))));
		return umfang;
	}

	public static void main(String[] args)
	{
		// Figur figur = new Ellipse(100, 80, new Point(100, 100));
	}

}
